package bdqn.hfxt;

import java.util.Scanner;

/**
 * 知识点类
 * @author  Mr.Liu
 * @Version 1.0
 */
public class Demo {

    public static void main(String[] args) {
        /**
         * 注释：解释说明的内容，不会被编译器当做代码指令运行
         *     1) 单行注释 //
         *     2) 多行注释 / *  * /
         *     3) 文档注释 / ** * /
         *           解释说明，添加注解，生成帮助文档的说明文字
         */
        //System.out.println("单行注释");
        //System.out.println("单行注释");
        /*
         * System.out.println("多行注释");
         * System.out.println("多行注释");
         */

        /**
         * System.out.println("文档注释");
         */
        /**
         *  文档注释
         */
        System.out.println("文档注释");//这是注释
        System.out.println("文档注释");

        //课后作业:
        //1、上网搜资料实现使用Idea工具生成帮助文档

        System.out.println(1000+1000*0.05);
        //0) 宾馆房间   --->  空间          -->  变量
        //1）确定几个人  --->  需要多大房间   -->  变量类型
        //2) 房间卡号   --->  确定唯一房间   -->  内存地址唯一   变量名
        //3) 入住      --->   房间里住人    -->  变量值

        //变量的三个组成部分：
        //   变量类型：确定所需要的内存空间大小
        //   变量名：确定唯一的地址的别名
        //   变量值：数据

        //一、数据类型：
        //Java支持的数据类型：八大基本类型，常用类型
        //八大基本类型：
        //   数值： byte   short   int[默认]   long
        //         float  double[默认]
        //   非数值： boolean   char
        //常用类型：  String
        System.out.println("byte：" + Byte.MIN_VALUE + " ~ " + Byte.MAX_VALUE);
        System.out.println("short：" + Short.MIN_VALUE + " ~ " + Short.MAX_VALUE);
        System.out.println("int：" + Integer.MIN_VALUE + " ~ " + Integer.MAX_VALUE);
        System.out.println("long：" + Long.MIN_VALUE + " ~ " + Long.MAX_VALUE);
        System.out.println("float：" + Float.MIN_VALUE + " ~ " + Float.MAX_VALUE);
        System.out.println("double：" + Double.MIN_VALUE + " ~ " + Double.MAX_VALUE);
        //byte：-128 ~ 127  超出范围就报错了
        //byte myByte = 128;

        //数值型的数据：直接数字即可
        //整数默认识别为 int
        //其中小数的识别方式：默认是double类型， 如果非要识别为float：在数字后加f/F
        //布尔类型只存储两个值：true   false
        //字符数据：使用单引号引起来的  例如： ‘a’  ‘#’  ‘中’
        //字符串数据：使用双引号引起来的  例如： “abc”

        //二、变量名
        //变量名称是唯一
        //命名规则：
        //   可以由  字母、数字、下划线、美元符号组成。除此以外的其他符号都不行
        //   首字符不能是数字
        //   采用驼峰命名法：第一个单词首字母小写，后面单词首字母大写  例如：myName
        //   见名知意

        //三、变量值
        // java支持的数据都可以成为变量值
        // 八大基本类型 + 常用类型

        //变量的使用：
        //使用变量的本质：就是使用别名代替真实数据做逻辑处理
        //步骤一：声明变量    ---> 计算机内存中开辟多大空间的区域，并指定区域
        //      变量类型  变量名;
        //步骤二：赋值       ---> 数据存储到指定的内存空间里
        //      变量名 = 变量值;
        //简化步骤：声明并赋值
        //      变量类型  变量名 = 变量值;

        //注意：
        //     任何情况下都不需要将变量用引号引起来
        //     当已知数据值时，可以简写定义变量。
        //     当数据不是直接直到，而是通过一个逻辑代码计算出来时使用分开写。或者，当需要提升变量作用域时，使用分开写。
        //     输出内容时，可通过+将变量与字符串拼接在一起
        //     再次使用相同变量名地址时，无需再定义类型
        //     变量作用域：变量使用范围，从声明位置开始到包含该变量的结束}为止

        //常量：在程序运行过程中，数据不会发生改变的空间
        //语法：
        //     使用 final修饰变量 --> 常量
        //关键字final写在类型之前
        //命名规则：
        //   可以由  字母、数字、下划线、美元符号组成。除此以外的其他符号都不行
        //   首字符不能是数字
        //   所有字母大写
        //   见名知意
        //通常情况下，一些约定俗成的数据，还有公认的数据会定义成常量。 或者 根据业务需求设置
        //          建议在定义常量时就赋值

        //表达式就是符号（如加号、减号）与操作数（如b，3等）的组合，单独的操作数也被称为表达式。


        //类型转换：将一个类型转换成另一个类型
        //实现方式一：自动类型转换
        //          将范围小的数据存储到范围大的空间中，无需另写其他代码。
        //    要求：类型要相互匹配，值的范围要小于等于变量范围
        //实现方式二：强制类型转换
        //         将范围大的数据 强制 存储到范围小的空间中，需要另写强转代码
        //   语法：  (强制类型)表达式
        //   注意：强制转换会丢失精度，不是做四舍五入，是直接舍弃
        //        强转只能转离它最近的一个表达式
        //   要求：类型要相互匹配，多个表达式是需要多次强转的
        //注意：
        //     表达式的结果类型由范围最大的操作数据类型决定！

        //某班第一次Java考试平均分81.29，第二次比第一次多2分，计算第二次考试平均分？

        //运算符：
        //赋值运算符  =
        //          执行顺序是从右到左
        //          认定：=左边写的一定是变量； =右边写的一定是变量值
        //算数运算符  +  -  *  /  %
        //          和数学中的用法一致
        //          +的两边都是数值类型数据，表示算数运算符求和； +的任意一边是字符串，表示连接符，将所有内容直接拼接
        //自增自减运算符  ++  --
        //          任何情况下都是    ++表示自身+1；  --表示自身-1
        //          语法：  ++变量   变量--
        //                 变量++   --变量
        //复合赋值运算符：算数运算符结合=   +=  -=  *=  /=  %=
        //          n1 += n2   等同于 n1 = n1 + n2;
        //          n1 -= n2   等同于 n1 = n1 - n2;
        //          n1 *= n2   等同于 n1 = n1 * n2;
        //          n1 /= n2   等同于 n1 = n1 / n2;
        //          n1 %= n2   等同于 n1 = n1 % n2;
        //          更改的是=左边的变量，右边的值不变
        //自增自减运算符结合=
        //          n1 = n2++
        //          n1 = ++n2
        //          当自增自减运算符写在变量之前就先计算，写在变量之后就后计算
        //自增自减运算符结合输出语句
        //          当自增自减运算符写在变量之前就先计算，写在变量之后就后计算
        //关系运算符  >  <  >=  <=  ==  !=
        //          用于比较大小，结果是布尔类型
        //          <=  >= 只要满足大于/小于  或者等于 一个即可
        //          == 比较两个值是否相等，常用于数值间比较 [布尔类型和字符类型也是用 == 比较相等]
        //             如果用于字符串比较，那么比较的是内存地址  可以使用字符串.equals(字符串)
        //          js中还有===  !==  <> [不用记]
        //逻辑运算符   &&  ||  !
        //  && 逻辑且 两个表达式的结果都为true，结果才为true，其他为false
        //  || 逻辑或 两个表达式的结果至少一个为true，结果就为true， 其他为false
        //  !  取反 表达式为true，结果false；表达式为false，结果true；
        //  &  且    两个表达式的结果都会计算，结果都为true，结果才为true，其他为false
        //  |  或    两个表达式的结果都会计算，至少一个为true，结果就为true， 其他为false
        // 注意：
        //     逻辑且和逻辑或，如果第一个表达式就能决定最终结果，那么第二个表达式就不会计算
        //     普通且和普通或，就算第一个表达式能决定最终结果，还是会计算第二个表达式

        //运算符优先级：高 --> 低
        // ()  -->  !  -->  * / %  -->  + -  -->  关系运算符  -->  &&  -->  ||  -->  =
        //优先级相同 从左到右 运算

        //输出语句：
        //   往控制台输出内容
        //   System.out.println()
        //输入语句
        //   从控制台获取内容
        //   Scanner扫描器，监视控制台有没有输入内容 [Scanner是类，使用时需要实例化对象]
        //   语法：
        //       Scanner 对象名 = new Scanner(System.in);
        //   别忘记导包  import 文件夹名.文件名 / *表示所有文件
        //   获取输入的值：
        //       整数：  对象名.nextInt()
        //       小数：  对象名.nextDouble()
        //       布尔：  对象名.nextBoolean()
        //     字符串：  对象名.next() //无 对象名.nextString()
        //       字符：  对象名.next().charAt(下标从0开始) //无 对象名.nextChar()


        byte myByte;  //1字符
        myByte = 100;

        short myShort;//2字符
        myShort = 100;

        myShort = myByte;
        //myByte = myShort;

        int myInt; //4字符
        myInt = 100;

        long myLong; //4字符
        myLong = 100;

        float myFloat; // 4字节
        myFloat = 1.2f;

        double myDouble; //8字节
        myDouble = 1.8;

        boolean myBool;//
        myBool = true;

        char myChar;  //2字节
        myChar = 'a';

        myInt = myChar;//ASC2码
        System.out.println("myInt： " + myInt);
        //myChar = myInt;

        String myStr;//
        myStr = "大家好！";

        //myStr = myInt;

        String info = "欢迎110班同学";

        System.out.println(myByte);

        System.out.println(info+"!!!");

        //逻辑处理
        myInt = 200;
        System.out.println(myInt);

        final double PI = 3.1415926;
        System.out.println("圆周率：" + PI);

        myInt = (int)myDouble;
        System.out.println(myInt);

        int num1;
        double num2 = 5.5;
        double num3 = 4.5;
        //num1 = (int)num2 + (int)num3;
        num1 = (int)(num2 + num3);
        System.out.println(num1);

        int n1 = 10;
        double n2 = 10.5;
        int num4 = 5;
        double n3 = n1+n2;

        double n4 = (double) num4;

        int n5 = 10;

        //学员王浩的Java成绩是80分，学员张萌的Java成绩与王浩的相同，输出张萌的成绩
        int wang = 80;
        int zhang;
        zhang = wang;
        //wang = zhang;

        int n6 = 120;
        int n7 = 20;
        int jg1 = n6 + n7; //120
        int jg2 = n6 - n7; //100
        int jg3 = n6 * n7; //2400
        int jg4 = n6 % n7; //0
        //n7++
        //++n7;
        //System.out.println(n7);

//        n6 += n7;
//        System.out.println(n6 + "  " + n7);

        //int n8 = n7++;
        //int n8 = ++n7;
        //System.out.println(n7 + "  " + n8);

        System.out.println(++n7);
        System.out.println(n7);

        int n9 = 200;
        int n10 = 100;

        n9 = n9 + n10; // n9 300  n10 100
        n10 = n9 - n10;// n9 300  n10 200
        n9 = n9 - n10; // n9 100  n10 200

        System.out.println(n9 < n10);
        System.out.println(n9 <= n10);

        System.out.println(n9 == n10);
        System.out.println(100 == 100);

        //面试题：
        //      ==  与 === 的区别？
        //解释题干：==是java里的关系运算符，而===是Javascript的关系运算符
        //解释区别：==常用于数值比较，是比较值是否一样，如果是字符串间的比较，是比较的内存地址
        //        ===在js中用于判断类型和值时候都相等。

        //System.out.println("a" == 1);//报错
//        String str1 = "a";
//        String str2 = "a";
//        System.out.println(str1 == str2);
//        //字符串池：在内存找那个开辟的特殊空间，用于存储字符串。
//        //每次定义字符串变量时，都会优先从字符串池中查找内容，有就直接交给变量，
//        //没有才会开辟新空间存储数据，但执行完后，java又会将数据挪到字符串池中。
//        Scanner input = new Scanner(System.in);
//        System.out.println("请输入：");
//        String str3 = input.next();
//        System.out.println("比较地址：" + (str1 == str3));
//        System.out.println("比较内容：" + str1.equals(str3));

        System.out.println("-----------------------------");
        boolean b1 = true;
        boolean b2 = true;
        System.out.println(b1 != b2);
        char c1 = 'a';
        char c2 = 'b';
        System.out.println(c1 != c2);

        int n11 = 1;
        int n12 = 2;
        int n13 = 3;
        System.out.println(n11 < n12 && n13 > n12);
        System.out.println(n11 > n12 || n13 > n12);
        System.out.println(  !(n11 > n12)  );

        System.out.println("----------------------");
        System.out.println( n11>n12 & n13++>n11 );
        System.out.println(n13);

        System.out.println( n11<n12 | n13++>n11 );
        System.out.println(n13);

        System.out.println(!true);
        System.out.println(!(n11<n12&&n13<n12));

        //改变运算符顺序的符号是()
        //int num5 = (10 + 20) * [(3 - 4) / 5];

        boolean jg = (n11 > n12 || n13 > n12) || (n11 < n12 && (n13 > n12 || n12 > n11) );
        //           0    1     6      2      7  0    3     5      4

        //创建扫描器
        Scanner input = new Scanner(System.in);
        System.out.println("请输入数字：");
        //输入整数
        //int zhi1 = input.nextInt();
        //System.out.println("输入的整数是：" + zhi1);
        //输入小数
        //double zhi2 = input.nextDouble();
        //System.out.println("输入的小数是：" + zhi2);
        //输入布尔
        //boolean zhi3 = input.nextBoolean();
        //System.out.println("输入的布尔值是：" + zhi3);
        //输入字符串
        //String zhi4 = input.next();
        //System.out.println("输入的字符串是：" + zhi4);
        //输入字符
        char zhi5 = input.next().charAt(0);
        System.out.println("输入的字符是：" + zhi5);

    }


}
